package com.gw.controller;

import com.gw.context.BaseContext;
import com.gw.pojo.dto.PostSADTO;
import com.gw.pojo.entity.PostSA;
import com.gw.pojo.vo.FileVO;
import com.gw.pojo.vo.PostSAVO;
import com.gw.pojo.vo.PostVO;
import com.gw.pojo.vo.UserVO;
import com.gw.result.Result;
import com.gw.service.PostSAService;
import com.gw.service.PostService;
import com.gw.service.UserService;
import com.gw.service.impl.AdminServiceImpl;
import com.gw.service.impl.PostSAServiceImpl;
import com.gw.service.impl.PostServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * 管理界面
 */
@RestController
@Slf4j
@RequestMapping("/admin")
public class AdminController {
    @Autowired
    private AdminServiceImpl adminService;
    @Autowired
    private PostSAServiceImpl postSAService;
    @Autowired
    private PostServiceImpl postService;
    // 做一个根据邮箱查询用户的接口，然后做一个接口修改此用户identity （0，管理   1，社员   2，普通用户）

    /**
     * 根据邮箱查询用户，获得用户的信息
     * @param email
     * @return
     */
    @GetMapping("/getUserByEmail")
    public Result<UserVO> getUserByEmail(String email){
        UserVO userVO=adminService.getUserByEmail(email);
        return Result.success(userVO);
    }



    /**
     * 根据前端获取的邮箱来修改用户的identity
     * @param email
     * @param identity
     * @return
     */
    @GetMapping("/changeIdentity")
    public Result<UserVO> ChangeUserIdentityByEmail(String email,int identity) {
        UserVO userVO = adminService.changeUserIdentityByEmail(email,identity);
        return Result.success(userVO);
    }
    //TODO 管理员可上传社团动态，社团风采，向资料中添加资料（实现方式：在controller直接进行identity判断）

    //上传社团动态和社团风采吗，其中的DTO就包含url，通过统一文件上传接口来实现，获取url。
    //故该上传操作在前端要调用两个接口，一个是上传文件，一个是上传社团动态或社团风采。文章同理。

    /**
     * 上传社团动态和社团风采
     * @param postSADTO
     * @return
     */
    @PostMapping("/addPostSA")
    public Result<PostSAVO> addPostSA(@RequestBody PostSADTO postSADTO){
//        int role=BaseContext.getCurrentUserRole();
        //TODO 后续要改成校验的，没校验token，先写定值。
        int role=0;
        if (role!=0){
            throw new RuntimeException("权限不足");
        }
        return Result.success(adminService.addPostSA(postSADTO));
    }



    //TODO 也可以做一个统计用户的页面（虽然好像没什么用，大部分人不会填写真实信息）

    //TODO 删除帖子模块（用户可在个人中心的myPost页面删除自己的帖子，管理员可在问答模块页面删除任何帖子），删除评论模块（同删帖）
    //TODO 删除帖子时首先删除帖子中所有评论，注意使用mysql事务管理

    /**
     * 删除问答帖子
     * @param id
     * @return
     */
    @DeleteMapping("deletePost")
    public Result deletePost(@RequestParam("id") Long id){
        int role=BaseContext.getCurrentUserRole();
        //TODO 后续要改成校验的，没校验token，先写定值,这里为普通社员身份
        if(role==1){

        }

        postService.deletePost(id);
        return Result.success();
    }


    /**
     * 删除社团动态,和社团风采作品展示
     * @param id
     * @return
     */
    @DeleteMapping("/deletePostSA")
    public Result<PostSAVO> deletePostSAVO(@RequestParam("id") Long id){
        postSAService.deletePost(id);
        return Result.success();
    }

    //TODO 置顶贴，我们之前讨论过，在页面右边留一块，为了方便（新建字段改动太大了），我们可以外建一张表存储置顶帖子
}
